package com.mangguo.tingjian.user.service.impl;

import com.mangguo.tingjian.user.controller.req.UserImageReq;
import com.mangguo.tingjian.user.dto.*;
import com.mangguo.tingjian.user.mapper.UserImageMapper;
import com.mangguo.tingjian.user.service.IUserImageService;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;

import java.util.*;

/**
 * <p>
 * 用户画像 服务实现类
 * </p>
 *
 * @author auto
 * @since 2019-11-23
 */
@Service
@AllArgsConstructor
public class UserImageAppServiceImpl implements IUserImageService {

    private final UserImageMapper userImageMapper;

    @Override
    public List<CountResult> countUniqueImeiByDateBetweenDate(UserImageReq userImageReq) {
        return userImageMapper.countUniqueImeiByDateBetweenDate(userImageReq);
    }

    @Override
    public List<ChannelResult> countUniqueImeiByChannelIdBetweenDate(UserImageReq userImageReq) {
        List<ChannelResult> list = userImageMapper.countUniqueImeiByChannelIdBetweenDate(userImageReq);
        list.addAll(userImageMapper.countUniqueImeiBySubchannelIdBetweenDate(userImageReq));
        if(list.size() < 5){
            return list;
        }
        return list.subList(0, 5);
    }

    @Override
    public List<CityResult> countUniqueImeiByCityBetweenDate(UserImageReq userImageReq) {
        return userImageMapper.countUniqueImeiByCityBetweenDate(userImageReq);
    }

    @Override
    public List<CityResult> countUniqueImeiForAllCityBetweenDate(UserImageReq userImageReq) {
        return userImageMapper.countUniqueImeiForAllCityBetweenDate(userImageReq);
    }

    @Override
    public List<ProvinceResult> countUniqueImeiByProvinceBetweenDate(UserImageReq userImageReq) {
        return userImageMapper.countUniqueImeiByProvinceBetweenDate(userImageReq);
    }

    @Override
    public List<ProvinceResult> countUniqueImeiForAllProvinceBetweenDate(UserImageReq userImageReq) {
        return userImageMapper.countUniqueImeiForAllProvinceBetweenDate(userImageReq);
    }

    @Override
    public List<PlatformResult> countUniqueImeiByPlatformBetweenDate(UserImageReq userImageReq) {
        return userImageMapper.countUniqueImeiByPlatformBetweenDate(userImageReq);
    }

    @Override
    public List<SystemResult> countUniqueImeiBySystemBetweenDate(UserImageReq userImageReq) {
        return userImageMapper.countUniqueImeiBySystemBetweenDate(userImageReq);
    }

    @Override
    public List<CountResult> countUniqueImeiByMonth(UserImageReq userImageReq) {
        return userImageMapper.countUniqueImeiByMonth(userImageReq);
    }

    @Override
    public Set<String> getAllChannel(String tableName) {
        Set<String> outSet = new TreeSet<>();
        List<String> list = userImageMapper.getAllSubChannelId(tableName);
        list.addAll(userImageMapper.getAllChannelId(tableName));
        list.stream().filter(Objects::nonNull).forEach(outSet::add);
        return outSet;
    }
}
